package com.turing.post.organization.util;

import java.math.BigInteger;
import java.util.List;

import javax.ejb.Local;
import javax.ejb.Remote;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSWebInput;

/**
 * 特约商户
 * 
 * @author zxp
 * @Dec 19, 2012
 */
@Remote
@Local
public interface MerchantDao {

	/**
	 * 根据商户编号查询
	 * 
	 * @param merchantNo
	 *            商户编号
	 * @return 特约商户
	 */
	public Merchant getMerchantByMerchantNo(String merchantNo);

	/**
	 * 根据商户编号查询锁定
	 * 
	 * @param merchantNo
	 *            商户编号
	 * @return 特约商户
	 */
	public Merchant getMerchantForUpdate(String merchantNo);

	/**
	 * 根据商户名称查询
	 * 
	 * @param merchantName
	 *            商户名称
	 * @return 特约商户
	 */
	public Merchant getMerchantByMerchantName(String merchantName);

	/**
	 * 查询总记录数
	 * 
	 * @param webInput
	 *            日志记录对象
	 * @param merchantNo
	 *            商户编号
	 * @param merchantName
	 *            商户名称
	 * @param merchantTypeId
	 *            商业类型Id
	 * @param incomeBranchId
	 *            发卡商分支机构id
	 * @param channelMode
	 *            渠道模式
	 * @return BigInteger 总记录数
	 */
	public BigInteger getMerchantTotal(PCPSWebInput webInput,
			String merchantNo, String merchantName, BigInteger merchantTypeId,
			BigInteger incomeBranchId, String channelMode, String regionNo);

	/**
	 * 分页记录数
	 * 
	 * @param webInput
	 *            日志记录对象
	 * @param merchantNo
	 *            商户编号
	 * @param merchantName
	 *            商户名称
	 * @param merchantTypeId
	 *            商业类型Id 0
	 * @param incomeBranchId
	 *            发卡商分支机构id 0
	 * @param channelMode
	 *            渠道模式 *
	 * @param page
	 *            页码
	 * @return List 商户列表
	 */
	public List<Merchant> getMerchantList(PCPSWebInput webInput,
			String merchantNo, String merchantName, BigInteger merchantTypeId,
			BigInteger incomeBranchId, String channelMode, String regionNo,
			Integer page);

	/**
	 * 发卡商下商户下拉
	 * 
	 * @param issueCompanyNo
	 * @return 发卡商下商户列表
	 */
	public List<Merchant> getMerchantListByIssueCompanyNo(String issueCompanyNo);
	
	/**
	 * 发卡商下商户下拉,过滤掉无效商户
	 * 
	 * @param issueCompanyNo
	 * @return 发卡商下商户列表
	 */
	public List<Merchant> getActivateMerchantListByIssueCompanyNo(String issueCompanyNo);

	/**
	 * 新增
	 * 
	 * @param merchant
	 * @throws PCPSApplicationException
	 */
	public void insertMerchant(Merchant merchant)
			throws PCPSApplicationException;

	/**
	 * 修改
	 * 
	 * @param merchant
	 * @throws PCPSApplicationException
	 */
	public void updateMerchant(Merchant merchant)
			throws PCPSApplicationException;

	/**
	 * 渠道商户信息统计表
	 * 
	 * @param webInput
	 * @return
	 */
	public List<Object[]> getMerchantReport(PCPSWebInput webInput);

	/**
	 * 根据渠道模式检索商户清单
	 * 
	 * @param channelMode
	 *            渠道模式
	 * @param webInput
	 * @return
	 */
	public List<Merchant> getMerchantByChannelMode(PCPSWebInput webInput,
			String channelMode);

	/**
	 * 根据商户编号检索商户名称
	 * 
	 * @param webInput
	 * @param merchantno
	 * @return
	 */
	public List<Object[]> getMerchantList(PCPSWebInput webInput,
			String merchantno);

	/**
	 * 自动生成特约商户编号
	 * 
	 * @param branchNo机构号
	 * @param regionNo区域号
	 * @return
	 */
	public String getAutoMerchantNo(String branchNo, String regionNo);
	/**
	 * 验证商户名称重复
	 * @param issuecompanyno 
	 */
	public Integer IsMerchantName(String issueCompanyNo, String merchantName,String merchantNo);
	
	/**
	 * 根据开发单位机构号查询商户列表
	 * @param webInput
	 * @param developBranchNo
	 * @return
	 */
	public List<Merchant> getMerchantByDevelopBranchNo(String developBranchNo);
}
